﻿//
//  Copyright (c) 2008, Rafael Bandeira
//  All rights reserved.
//
//  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
//
//  * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
//
//  * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other 
//  materials provided with the distribution.
//
//  * Neither the name of Rafael Bandeira nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior 
//  written permission.
//
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
//  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
//  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
//  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Google.Negocio;

namespace Google.Web.Modulos.Funcionarios
{
    public partial class Item : Item<Funcionario>
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    //
                    // Se não estiver em um postback, popular o grid com os valores novamente
                    // Ainda seleciona os select box com os valores devidos.
                    //
                    Popular();
                    CarregarObjeto();
                }
            }
            catch (Exception)
            {
                throw;
            }

        }

        //
        // Método que atualiza os valores do ddlEstados
        //
        private void Popular()
        {
            this.ddlEstados.DataSource = Estado.Select<Estado>();
            this.ddlEstados.DataBind();
        }

        //
        // Método que carrega os objetos de acordo com a situação (editando ou novo)
        //
        private void CarregarObjeto()
        {
            //
            // Carrega o generics que irá retornar as propriedades da entidade
            //
            var obj = Carregar();
            this.txtNome.Text = obj.Nome;

            //
            // Se o CodCidade for maior que zero, quer dizer que o form está editando um registro.
            //
            if (obj.CodCidade > 0)
            {
                var objCidade = new Cidade(obj.CodCidade);
                //
                // Popular as cidades de acordo com o codEstado informado
                //
                PopularCidades(objCidade.CodEstado);
                this.ddlEstados.SelectedValue = objCidade.CodEstado.ToString();
                this.ddlCidades.SelectedValue = obj.CodCidade.ToString();                
            }

        }

        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            try
            {
                Validate();

                if (Page.IsValid)
                {

                    //
                    // Instancia o generics
                    //
                    var obj = Carregar();

                    //
                    // Seta as propriedades e salva
                    //                    
                    obj.CodCidade = Convert.ToInt32(ddlCidades.SelectedValue);
                    obj.Nome = this.txtNome.Text;
                    obj.Save();

                    //
                    // Redireciona para a tela de listagem
                    //
                    Response.Redirect("default.aspx", false);
                }

            }
            catch (Exception ex)
            {
                throw;
                //
                //TODO: Aprimorar o expection para logar o erro e depois tratar
                //
                Response.Redirect("~/Erros/Default.aspx");
            }
        }

        protected void ddlEstados_SelectedIndexChanged(object sender, EventArgs e)
        {
            int codEstado;

            //
            // Verifica se o valor é passível de ser convertido para inteiro e retorna o codEstado
            //
            if (int.TryParse(this.ddlEstados.SelectedValue, out codEstado)) {
                PopularCidades(codEstado);
            }
            
        }

        //
        // Método que iraá carregar os valores do ddlCidades de acordo com o ddlEstados selecionado
        //
        private void PopularCidades(int codEstado)
        {
            //
            // Loop que remove todos os itens já adicionados anteriormente, exceto o 1º
            //
            while (this.ddlCidades.Items.Count > 1)
            {
                this.ddlCidades.Items.RemoveAt(this.ddlCidades.Items.Count - 1);                
            }

            //
            // Instancia o Generics dando um select nas cidades de um estado informado            
            //
            var objCidade = new Cidade();
            objCidade.CodEstado = codEstado;
            this.ddlCidades.DataSource = Cidade.Select<Cidade>(objCidade, "CodEstado");
            this.ddlCidades.DataBind();
        }
    }
}
